home *** CD-ROM | disk | FTP | other *** search
/ Internet Surfer: Getting Started / Internet Surfer - Getting Started (Wayzata Technology)(7231)(1995).bin / pc / mac / bonus / peter_le / cdiconki / cdiconki.a next >
Text File  |  1994-06-18  |  3KB  |  166 lines

  1. ; CDIconKiller ⌐ 1994 Quinn & Peter N Lewis
  2. ; Written in 4 hours from 02:00 to 05:30 18/June/94
  3.  
  4. ; Patches GetCatInfo, tests for Custom Icon attribute on
  5. ; CD-ROM files/folders, and clears it.
  6.  
  7. ; Detailed description:
  8.  
  9. ; Init time:
  10. ;   Find the driver refnum for ".AppleCD" and remeber it.
  11. ;   Patch GetCatInfo
  12.  
  13. ; GetCatInfo Patch:
  14. ;   Test for GetCatInfo selector on HFSDispatch, do nothing otherwise
  15. ;   Call thru
  16. ;   Return immediately on error
  17. ;   Return immediately unless Custom Icon bit set
  18. ;   Walk the volume queue looking for the vrefnum of the GetCatInfo
  19. ;   If we don't find it, we leave
  20. ;   If we do and the driver refnum matches the CD-ROM driver's refnum, 
  21. ;     then clear the custom icon bit
  22. ;   Otherwise, we leave
  23.  
  24.     include    'sysequ.a'
  25.     include    'fsequ.a'
  26.     include    'traps.a'
  27.  
  28. ; procedure ShowIcon (id: integer; delta_x: integer);
  29.     import    ShowIcon
  30.  
  31. main    proc    export
  32.     movem.l    a2/d3,-(sp)
  33.     move.l    UTableBase,a2
  34.     move.w    UnitNtryCnt,d3
  35. loop    move.l    (a2)+,a1
  36.     move.l    a1,d0
  37.     beq.s    endloop
  38.     
  39. ; a1 = curDCtlHndl
  40.  
  41.     move.l    (a1),a1
  42.     move.l    dCtlDriver(a1),a0
  43.     move.l    a0,d0
  44.     beq.s    endloop
  45.     btst.b    #6,dCtlFlags+1(a1)    ; test for RAMDriver
  46.     beq.s    notram
  47.     move.l    (a0),a0
  48.     move.l    a0,d0
  49.     beq.s    endloop
  50. notram    lea    drvrName(a0),a0
  51.     lea    cdromstr,a1
  52.     clr.l    d0
  53.     move.b    (a0)+,d0
  54.     swap    d0
  55.     move.b    (a1)+,d0
  56.     _CmpString
  57.     beq.s    found
  58.     
  59. endloop    subq.w    #1,d3
  60.     bne    loop
  61.     
  62.     bra    bad
  63.  
  64. OurHFSDispatch
  65.     cmp.w    #9,d0    ; Test for GetCatInfo selector
  66.     beq.s    doit
  67.     move.l    oldHFSDispatch,-(sp)    ; Call thru
  68.     rts
  69.     
  70. doit    pea    continue
  71.     move.l    oldHFSDispatch,-(sp)    ; Call thru and continue
  72.     rts
  73.  
  74. continue    tst.w    d0
  75.     bne.s    fin    ; give up on error
  76.     
  77.     btst.b    #2,ioFlUsrWds+8(a0)
  78.     beq.s    fin    ; give up unless custom icon
  79.     
  80.     movem.l    a1/d1,-(sp)
  81.     
  82.     move.l    VCBQHdr+2,a1    ; first volume control block
  83.     
  84.     move.w    ioVRefNum(a0),d1
  85. lop    cmp.w    vcbVRefNum(a1),d1
  86.     bne.s    cont
  87.  
  88.     move.w    drvrrn,d1
  89.     cmp.w    vcbDRefNum(a1),d1
  90.     bne.s    leave
  91.     
  92.     bclr.b    #2,ioFlUsrWds+8(a0)    ; clear custom icon
  93.     bra    leave
  94. cont
  95.     move.l    (a1),a1    ; next volume control block
  96.     move.l    a1,d0
  97.     bne.s    lop
  98.  
  99. leave
  100.     movem.l    (sp)+,a1/d1
  101.     clr.w    d0
  102.     
  103. fin    tst.w    d0
  104.     rts
  105.  
  106. drvrrn    dc.w    0
  107. oldHFSDispatch    dc.l    0
  108.  
  109. EndHFSDispatch
  110.  
  111. found    sub.w    UnitNtryCnt,d3    ; calc driver refnum -(unit num+1)
  112.     subq.w    #1,d3
  113.     lea    drvrrn,a0
  114.     move.w    d3,(a0)
  115.     
  116.     move.w    #$A060,d0    ; patch HFSDispatch
  117.     _GetTrapAddress    ,newOS
  118.     lea    oldHFSDispatch,a1
  119.     move.l    a0,(a1)
  120.  
  121.     move.l    #EndHFSDispatch-OurHFSDispatch,d0
  122.     _NewPtr    ,Sys
  123.     move.l    a0,d1
  124.     beq.s    bad
  125.     
  126.     move.l    a0,a2
  127.     
  128.     move.l    a0,a1
  129.     lea    OurHFSDispatch,a0
  130.     move.l    #EndHFSDispatch-OurHFSDispatch,d0
  131.     _BlockMove
  132.  
  133.     move.w    #$A060,d0
  134.     move.l    a2,a0
  135.     _SetTrapAddress    ,newOS
  136.     
  137.     move.w    #128,-(sp)
  138.     move.w    #-1,-(sp)
  139.     jsr    ShowIcon
  140.     bra.s    done
  141.     
  142. bad
  143.     move.w    #129,-(sp)
  144.     move.w    #-1,-(sp)
  145.     jsr    ShowIcon
  146.  
  147. done    movem.l    (sp)+,a2/d3
  148.     rts
  149.  
  150.     string    pascal
  151.  
  152. cdromstr    dc.b    '.AppleCD'
  153.  
  154.     endp
  155.     
  156.     end
  157.     
  158. asm -wb "{active}"
  159. (evaluate "{active}" =~ "/(?*:)¿1(?*)/" )> dev:null
  160. (evaluate "{active}" =~ "/(?*)¿2.a/" )> dev:null
  161. link -rt INIT=128 -ra =ressysheap,reslocked -t INIT -c CDik -o "{¿2}" "{active}.o" "{¿1}ShowIcon.o"
  162. setfile -a B "{¿2}"
  163.  
  164.  
  165.  
  166. dumpobj "{¿1}SHOWICON.o"